<?php

namespace app\admin\controller;

use app\model\AdminInfo as ModelAdminInfo;
use app\model\AdminGroup as ModelAdminGroup;

/**
 * 权限管理（角色管理）
 * Class Role
 * @package app\facilitator\controller
 */
class Role extends Member
{
    public function _initialize()
    {
        parent::_initialize();
    }

    /**
     * 获取服务商账号所有权限列表 \n
     * URI : /admin/get.all.authority.list
     * @param :
     *  name         | type   | null | description
     * --------------|--------|------|-------------
     *  passport     | string | 必填  | 用户票据
     *
     * @return
     *  name      | type   | description
     * -----------|--------|-------------
     *  number    | string | 权限编号
     *  menu_name | string | 菜单名称
     *  second    | array  | 二级列表
     *
     * second:
     *  name      | type   | description
     * -----------|--------|-------------
     *  number    | string | 权限编号
     *  menu_name | string | 菜单名称
     *
     */
    public function getAuthorityList()
    {
        _returnData(config('admin_list'));
    }

    /**
     * 获取角色列表 \n
     * URI : /admin/get.role.list
     * @param :
     *  name         | type   | null | description
     * --------------|--------|------|-------------
     *  passport     | string | 必填  | 用户票据
     *  page         | int    | 必填  | 当前页码
     *  listRows     | int    | 必填  | 一页的条数
     *
     * @return
     *  name       | type  | description
     * ------------|-------|-------------
     *  totalPages | int   | 总页数
     *  list       | array | 列表
     *
     * list:
     *  name     | type   | description
     * ----------|--------|-------------
     *  groupId  | int    | 角色ID
     *  roleName | string | 角色名称
     *
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getRoleList()
    {
        $int_now_page = $this->_getContentParams('page'); // 当前页码
        _toValidate('id', $int_now_page, 10005);

        $int_list_rows = $this->_getContentParams('listRows'); // 一页的条数
        _toValidate('id', $int_list_rows, 10006);

        $arr_where = ['id' => ['GT', 0]];

        $int_total_rows = ModelAdminGroup::getInstance()->toCount($arr_where);
        $int_total_pages = (int)ceil($int_total_rows / $int_list_rows);//总页数
        _toCompare(($int_now_page > $int_total_pages && $int_total_pages > 0), '===', true, 10007);
        $int_first_row = $int_list_rows * ($int_now_page - 1);//从第几条开始查询

        $arr_list = (array)ModelAdminGroup::getInstance()->toSelect($arr_where, 'id AS groupId,role_name AS roleName', $int_first_row, $int_list_rows, 'id DESC');

        _returnData(['totalPages' => $int_total_pages, 'list' => $arr_list]);
    }

    /**
     * 添加角色信息 \n
     * URI : /admin/add.role.info
     * @param :
     *  name     | type   | null | description
     * ----------|--------|------|-------------
     *  passport | string | 必填  | 用户票据
     *  roleName | string | 必填  | 角色名称
     *  content  | string | 必填  | 权限内容(格式：1_1,2_2,1_2)
     *
     * @return
     *  name       | type  | description
     * ------------|-------|-------------
     *  groupId    | int   | 角色编号
     *
     */
    public function addRoleInfo()
    {
        $str_role_name = (string)trim($this->_getContentParams('roleName'));
        _toCompare(empty($str_role_name), '===', true, 12049);

        $str_content = (string)$this->_getContentParams('content');
        _toCompare(isset(explode(',', $str_content)[0]) && isset(explode('_', explode(',', $str_content)[0])[0]), '===', false, 12050);

        $arr_data = [
            'role_name' => $str_role_name,
            'content' => $str_content,
        ];

        $int_group_id = ModelAdminGroup::getInstance()->toAdd($arr_data);

        _returnData(['groupId' => $int_group_id]);
    }

    /**
     * 获取角色详细信息 \n
     * URI : /admin/get.role.info
     * @param :
     *  name     | type   | null | description
     * ----------|--------|------|-------------
     *  passport | string | 必填  | 用户票据
     *  groupId  | int    | 必填  | 角色编号
     *
     * @return
     *  name     | type   | description
     * ----------|--------|-------------
     *  groupId  | int    | 角色编号
     *  roleName | string | 角色名称
     *  content  | string | 权限内容(格式：1_1,2_2,1_2)
     *
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getRoleInfo()
    {
        $int_group_id = (int)$this->_getContentParams('groupId');
        _toValidate('id', $int_group_id, 12057);

        $arr_info = ModelAdminGroup::getInstance()->toFind(['id' => $int_group_id], 'id AS groupId,role_name AS roleName,content');

        _toCompare(isset($arr_info['groupId']), '===', false, 12051);

        _returnData($arr_info);
    }

    /**
     * 修改角色信息 \n
     * URI : /admin/update.role.info
     * @param :
     *  name     | type   | null | description
     * ----------|--------|------|-------------
     *  passport | string | 必填  | 用户票据
     *  groupId  | int    | 必填  | 角色编号
     *  roleName | string | 必填  | 角色名称
     *  content  | string | 必填  | 权限内容(格式：1_1,2_2,1_2)
     *
     * @return
     *  name  | type | description
     * -------|------|-------------
     *  ----- | ---- | 无
     *
     * @throws \think\Exception
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @throws \think\exception\PDOException
     */
    public function updateRoleInfo()
    {
        $int_group_id = (int)$this->_getContentParams('groupId');
        _toValidate('id', $int_group_id, 12057);

        $str_role_name = (string)trim($this->_getContentParams('roleName'));
        _toCompare(empty($str_role_name), '===', true, 12049);

        $str_content = (string)$this->_getContentParams('content');
        _toCompare(isset(explode(',', $str_content)[0]) && isset(explode('_', explode(',', $str_content)[0])[0]), '===', false, 12050);

        $arr_info = ModelAdminGroup::getInstance()->toFind(['id' => $int_group_id], 'id');

        _toCompare(isset($arr_info['id']), '===', false, 12051);

        $arr_data = [
            'role_name' => $str_role_name,
            'content' => $str_content,
            'gmt_modified' => $this->_now,
        ];

        ModelAdminGroup::getInstance()->toUpdate(['id' => $int_group_id], $arr_data);

        _returnData();
    }

    /**
     * 删除角色信息 \n
     * URI : /admin/delete.role.info
     * @param :
     *  name     | type   | null | description
     * ----------|--------|------|-------------
     *  passport | string | 必填  | 用户票据
     *  groupId  | int    | 必填  | 角色编号
     *
     * @return
     *  name  | type | description
     * -------|------|-------------
     *  ----- | ---- | 无
     *
     * @throws \think\Exception
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     * @throws \think\exception\PDOException
     */
    public function deleteRoleInfo()
    {
        $int_group_id = (int)$this->_getContentParams('groupId');
        _toValidate('id', $int_group_id, 12057);

        $arr_info = ModelAdminGroup::getInstance()->toFind(['id' => $int_group_id], 'id');

        _toCompare(isset($arr_info['id']), '===', false, 12051);

        $arr_data = ModelAdminInfo::getInstance()->toFind(['group_id' => $int_group_id], 'id');
        _toCompare(isset($arr_data['id']), '===', true, 12052);

        ModelAdminGroup::getInstance()->toDelete($int_group_id);

        _returnData();
    }
}
